/*
【包名:】排序算法
【作者:】技术狼
*/
package fun

import (
	"math/rand"
	"time"
)

// @title: 快速排序
// @param: nums:数组
// @return:
// @description: left 和 right 的边界条件，如果 left 大于等于 right，则无需排序。
// @date: 2024/6/11 22:32
func QuickSort(nums []int, left, right int) {
	val := nums[(left+right)/2]
	i, j := left, right
	for nums[j] > val {
		j--
	}
	for nums[i] < val {
		i++
	}
	nums[i], nums[j] = nums[j], nums[i]
	i++
	j--
	if i < right {
		QuickSort(nums, i, right)
	}
	if j > left {
		QuickSort(nums, left, j)
	}
}

// @title: 冒泡排序
// @param: nums:数组
// @return:
// @description:
// @date: 2024/6/11 22:32
func BubbleSort(nums []int) {
	length := len(nums)
	for i := 1; i < length; i++ {
		for j := 0; j < length-1; j++ {
			if nums[j] > nums[i] {
				nums[j], nums[i] = nums[i], nums[j]
			}
		}
	}
}

// @title: 洗牌算法
// @param: nums:数组
// @return:
// @description:
// @date: 2024/6/11 22:32
func Shuffle(arr []int) {
	rand.Seed(time.Now().UnixNano())
	var i, j int
	var temp int
	for i = len(arr) - 1; i > 0; i-- {
		j = rand.Intn(i + 1)
		temp = arr[i]
		arr[i] = arr[j]
		arr[j] = temp
	}
}
